#include <iostream>
#include <unistd.h>
#include <cstring>
#include <signal.h>
#include <sys/wait.h>

using namespace std;

// 自定义信号处理函数
void handleFunc(int sig)
{
    cout << "I am child process, helloworld." << endl;
}

void handleAlarmFunc(int sig)
{
    cout << "alarm is comming..." << endl;
    alarm(10);
}

int main()
{
    // 创建进程
    pid_t pid = fork();
    if (pid < 0)
    {
        perror("fork error");
        exit(-1);
    }
    else if (pid == 0)
    {
        // 子进程
        // 注册信号
        signal(SIGUSR1, handleFunc);
        signal(SIGALRM, handleAlarmFunc);
        
        alarm(10); // 程序不是阻塞在这，还继续往下走
        cout << "child process." << endl;
    }
    else
    {
        // 父进程
        usleep(1000);
        int cnt = 3;
        while (cnt--)
        {
            kill(pid, SIGUSR1);
            sleep(3);
        }
    }

    while (1)
    {
        sleep(1);
    }

    return 0;
}